iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
佛心分享-SideProject30

門外漢的嵌入式地獄系列 第 11

Day 11 。初入嵌入式開發-TF-A 說明

  • 分享至 

  • xImage
  •  

TF-A 說明

TF(Trusted Firmware)是ARM的安全解決方案,為安全性提供了整體解決方案。

這個 TF-A 可以符合大多數 SoC 廠商的 CPU 設計 , 他會負責幫我們將各個部分依照順序載入,並且去驗證個個步驟是否正確。

像是之後會說明的 Optee , Uboot , Linux 等等。

在 STM32MPU 當中 ,它其實就是第一階段引導程式(FSBL)。

下圖是 ST官方對TF-A 每個步驟的說明

https://ithelp.ithome.com.tw/upload/images/20240806/20146325rhphvj0Dr9.png

TF-A 的載入步驟

  1. ROM Code 載入 , 並且去呼叫 BL2。
  2. BL2 會去 載入 BL32
  3. 接著 BL2 載入 BL33
  4. 之後 BL2 會去調用剛剛載入的 BL32
  5. 當 BL32 鑑權後沒有問題,會再由 BL32 去掉用 BL33

https://ithelp.ithome.com.tw/upload/images/20240806/20146325J6Cef0yD4v.png

BL1

BL1是啟動的第一階段,被設計為充當ROM代碼,它在內部的RAM當中載入並執行。

STM32 MPU不使用此階段。因為 STM32 MPU 有自己的 ROMCode 來代替這個部分,所以下一階段 BL2 就是第一個要執行的 TF-A bin 檔案。

BL2

BL2負責載入下一階段的鏡像(安全OR不安全的 像是 OPTEE)。

 BL2在這個階段必須初始化所有需要的周邊設備。

  • CLK、DDR。
  • 安全元件:加密 (鑑權)、mem 、...
  • emmc or sd 卡這一類的儲存設備

在結束時,會載入BL32和(BL33) ,BL2跳到BL32 (AArch32)。

BL31

這裡先不說 因為 AArch32 沒有

BL32

就是 Optee , 安全功能。BL32作為安全監視器,為不安全的作業系統提供安全服務。這些服務由帶有安全監視器呼叫的非安全軟體呼叫。

BL33不會放在TF-A當中,這是TF-A載入的第一個非安全的程式。在引導程式當中,這是第二個引導程式(SSBL),對於STM32 MPU來說,SSBL預設會是U-Boot。

TF-A可以用設備樹(Devices tree )來設定管理相關介面或周邊設備。在BL2階段的時候,可以想像它是Linux Kernel 的簡化版,在過程當中只使用所需的設備 (Ex : DDR EMMC SD 等等)。

TF-A 檔案說明

可以到官網去載下來看看 : TF-A官網: https://www.trustedfirmware.org/

STM Wiki 上的 BSP 當中其實也包含了,也可以從 BSP 當中去了解。

目錄/文件 說明
bl1、bl2、bl31、bl32 主要放 TF-A 每一個啟動階段的引導程式的程式碼。
common 公共的通用程式碼,可以被各個階段去使用。
drivers 裝置驅動程式的程式碼,用來跟處理器和周邊裝置進行通訊。
docs 專案的相關文件、使用者手冊、開發手冊等等
include 就是我們常說的 header 檔案
lib 一些通用的lib。
Makefile、Makefile.sdk 用來建立專案的Makefile 檔案,定義了編譯、連結和建置過程中的規則和命令。
plat 存放針對特定平台的程式碼或配置,像是常見的 NXP 、 ST 、Ateml等等
services 輔助工具,用來 Debug or Build 專案。

LOG 分析

當燒錄到板子上並選擇了對應的 boot 模式後,就可以上電來測試看看。一上電 終端其實就會 Print 出很多的相關資訊。

  NOTICE:  CPU: STM32MP157AAC Rev.Z
  NOTICE:  Model: STMicroelectronics STM32MP157A-DK1 Discovery Board
  INFO:    Reset reason (0x15):
  INFO:      Power-on Reset (rst_por)
  INFO:    Using EMMC
  INFO:      Instance 2
  INFO:    Boot used partition fsbl1
  NOTICE:  BL2: v1.6-r3.0(debug):d64a19a
  NOTICE:  BL2: Built : 15:17:50, Feb  3 2021
  INFO:    BL2: Doing platform setup
  INFO:    RAM: DDR3-1066/888 bin G 2x4Gb 533MHz v1.45
  INFO:    Memory size = 0x40000000 (1024 MB)
  INFO:    BL2 runs SP_MIN setup
  INFO:    BL2: Loading image id 4
  INFO:    Loading image id=4 at address 0x2ffef000
  INFO:    Image id=4 loaded: 0x2ffef000 - 0x30000000
  INFO:    BL2: Loading image id 5
  INFO:    Loading image id=5 at address 0xc0100000
  INFO:    STM32 Image size : 823559
  WARNING: Skip signature check (header option)
  INFO:    Image id=5 loaded: 0xc0100000 - 0xc01c9107
  NOTICE:  BL2: Booting BL32
  INFO:    Entry point address = 0x2ffef000
  INFO:    SPSR = 0x1d3
  INFO:    Cannot find st,stpmic1 node in DT
  NOTICE:  SP_MIN: v1.6-r3.0(debug):d64a19a
  NOTICE:  SP_MIN: Built : 15:17:50, Feb  3 2021
  INFO:    ARM GICv2 driver initialized
  INFO:    stm32mp HSE (20): Secure only
  INFO:    stm32mp PLL2 (27): Secure only
  INFO:    stm32mp PLL2_R (30): Secure only
  INFO:    SP_MIN: Initializing runtime services
  INFO:    SP_MIN: Preparing exit to normal world


  U-Boot 2018.11-stm32mp-r4-g569038fc (Feb 11 2022 - 03:03:27 +0000)

  CPU: STM32MP157AAC Rev.Z
  Model: STMicroelectronics STM32MP157A-DK1 Discovery Board
  Board: stm32mp1 in trusted mode (st,stm32mp157a-dk1)
  DRAM:  1 GiB
  • Line 1 : CPU型號是STM32MP157AAC
  • Line 2 : 開發板是STM 的 STM32MP157A-DK1 Discovery Board → 這是STM 所提供評估用的公板
  • Line 3~4 : 說明系統Rst的代碼是0x15,原因是上電RST。
  • Line 5~6 : 使用EMMC儲存設備,也就是我們的boot模式,有 SD 與 EMMC 兩種啟動方式
  • Line 7 : 使用 FSBL1 的分割區啟動,後續的文章會說明到這部分,其實與我們所編譯出來的 tsv 檔案有關
  • Line 11~12 : 板載RAM是DDR3 速度533MHz 大小為2x4Gb(8Gb)
  • Line 14~15 : BL2載入id 4的image,載入到記憶體位址0x2ffef000。
  • Line 17~21 : 概念同上
  • Line 22 : BL2 啟動 BL32。
  • Line 23 : BL32的進入點是記憶體的0x2ffef000。
  • Line 36,U-Boot的版本與針對STM32MP的修改和編譯後產生出這個bin檔的時間。

上一篇
Day 10 。初入嵌入式開發-創建自己的 bbappend
下一篇
Day 12 。初入嵌入式開發-Optee說明
系列文
門外漢的嵌入式地獄18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言